#define F_CPU 7372800UL
#define UART_BAUDRATE 			9600 // 9600 bps
#define UBRR_ERTEK 				((F_CPU / (UART_BAUDRATE * 16UL)) - 1)
#define ENABLE_UART_RX_INT 		UCSRB &= ~(1 << RXEN) | ~(1 << TXEN); UCSRB |= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN)
#define DISABLE_UART_RX_INT 		UCSRB &= ~(1 << RXCIE) | ~(1 << RXEN) | ~(1 << TXEN)

//Prototipes
void UARTStringKuld(char *str);
void UARTAdatKuld(unsigned char data);
unsigned char UARTAdatFogad();

void INIT_UART()  // UART beallitasa
{
   // 9600 bps soros kommunikacio sebesseg beallitasa
   UBRRL = UBRR_ERTEK;        // UBRR_ERTEK also 8 bitjenek betoltese az UBRRL regiszterbe
   UBRRH = (UBRR_ERTEK>>8);   // UBRR_ERTEK felso 8 bitjenek betoltese az UBRRH regiszterbe
   // Aszinkron mod, 8 Adat Bit, Nincs Paritas Bit, 1 Stop Bit
   UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
	//Ado es Vevo aramkorok bekapcsolasa
   UCSRB |= (1 << RXEN) | (1 << TXEN); //
}
void UARTStringKuld(char *str){
	while (*str){
		UARTAdatKuld(*str);
		str++;
	}
}
void UARTAdatKuld(unsigned char data) // Ez a fuggveny a kuldendo adatot beirja az UDR regiszter kimeno pufferjebe
{
          while(!(UCSRA & (1<<UDRE))){ } // Varakozas amig az Ado kesz nem lesz az adatkuldesre
          // Az Ado mar kesz az adatkuldesre, a kuldendo adatot a kimeno pufferjebe irjuk
          UDR=data;
}
unsigned char UARTAdatFogad() // Ez a fuggveny a beerkezo adatokat kiolvassa az UDR regiszter bejovo pufferebol
{
          while(!(UCSRA & (1<<RXC))){ } // Varakozas amig nincs uj bejovo adat           
          //Most mar van beerkezett adat, amit kiolvasunk a pufferbol
          return UDR;
}
